/** 
 * 事件总线
 */


// // 法一: 事件总线
// const listeners = {};
// export default {
//   // 监听一个事件
//   $on(eventName, handler) {
//     if (!listeners[eventName]) {
//       listeners[eventName] = new Set();
//       // 初始化listeners[eventName], 使用Set是为了防止重复
//       // Set数组里存放的是eventName事件的处理函数
//     }
//     listeners[eventName].add(handler); // 把handler加入数组, Set数组里不会出现重复, add是数组Set的方法
//   },
//   // 取消监听
//   $off(eventName, handler) {
//     if (!listeners[eventName]) {
//       return;
//     }
//     listeners[eventName].delete(handler); // 删除事件

//   },
//   // 触发事件 [抛出事件]
//   $emit(eventName, ...args) {
//     if (!listeners[eventName]) {
//       return;
//     }
//     for (const handler of listeners[eventName]) {
//       // 依次执行事件处理函数
//       handler(...args);
//     }
//   }
// }

// // 法二: 事件总线
// // 还可以用一个简单的写法, 直接创建vue的一个实例
// // 因为vue实例中本身就有$on, $off, $emit方法
// import Vue from "vue";
// export default new Vue({}); // 创建vue示例并导出


// 法三: 事件总线
// 也可以将vue实例直接放到Vue原型中, 这样就不需要每次使用时导入该文件了
import Vue from "vue";
const app = new Vue({});
Vue.prototype.$bus = app;
export default app; // 导出, 让其他js模块也能使用事件总线



/**
 * 事件1: mainScroll
 * 含义: 主区域滚动条位置变化后触发
 * 参数:
 * - 滚动的dom元素, 如果是undefined, 则表示dom元素已经不存在
 * 
 * 事件2: setMainScroll
 * 含义: 当需要设置滚动条位置时触发
 * 参数:
 * - 滚动高度
 * 
 * 事件3: blogDetailToc
 * 含义: 当发现当前文章的数据中未包含toc数据, 则通过该事件传递设置好的toc数据
 * 参数:
 * - toc数据的对象
 */



